// pages/booking/pet-care-detail/index.js
const app = getApp();
const apiService = require('../../../utils/api.js');

Page({

	/**
	 * 页面的初始数据
	 */
	data: {
		statusBarHeight: 0,
		
		// 导航栏滚动状态
		scrollY: 0,
		navbarOpacity: 0,  // 导航栏背景透明度 (0-1)
		navbarTextColor: '#FFFFFF', // 导航栏文字颜色
		
		// 门店信息
		storeId: '',
		beauticianId: '',
		storeInfo: null,
		beauticianInfo: null,
		isLoading: true,
		
		// 服务信息
		arrivalTime: '', // 到店时间
		selectedServices: '', // 选择的服务项目
		
		// 宠物信息
		selectedPet: {}, // 选中的宠物
		
		// 联系人信息
		contactName: '',
		contactPhone: '',
		remarks: '',
		
		// 协议勾选
		agreementChecked: false
	},

	/**
	 * 生命周期函数--监听页面加载
	 */
	onLoad(options) {
		this.getSystemInfo();
		this.processPageOptions(options);
	},

	/**
	 * 获取系统信息
	 */
	getSystemInfo() {
		const systemInfo = wx.getSystemInfoSync();
		this.setData({
			statusBarHeight: systemInfo.statusBarHeight
		});
	},

	/**
	 * 处理页面参数
	 */
	processPageOptions(options) {
		console.log('页面参数:', options);
		
		// 获取门店ID和美容师ID
		if (options.storeId) {
			this.setData({
				storeId: options.storeId
			});
		}

		if (options.beauticianId) {
			this.setData({
				beauticianId: options.beauticianId
			});
		}

		// 如果有传入的数据，进行处理
		if (options.storeInfo) {
			try {
				const storeInfo = JSON.parse(decodeURIComponent(options.storeInfo));
				this.setData({
					storeInfo: storeInfo
				});
			} catch (e) {
				console.error('解析门店信息失败:', e);
			}
		}

		if (options.arrivalTime) {
			this.setData({
				arrivalTime: decodeURIComponent(options.arrivalTime)
			});
		}

		if (options.selectedServices) {
			this.setData({
				selectedServices: decodeURIComponent(options.selectedServices)
			});
		}

		if (options.selectedPet) {
			try {
				const selectedPet = JSON.parse(decodeURIComponent(options.selectedPet));
				this.setData({
					selectedPet: selectedPet
				});
			} catch (e) {
				console.error('解析宠物信息失败:', e);
			}
		}

		// 加载门店和美容师信息
		this.loadStoreAndBeauticianInfo();
		
		// 预填用户信息
		this.loadUserInfo();
	},

	/**
	 * 加载门店和美容师信息
	 */
	async loadStoreAndBeauticianInfo() {
		this.setData({ isLoading: true });
		
		try {
			// 并行加载门店和美容师信息
			const promises = [];
			
			if (this.data.storeId) {
				promises.push(this.loadStoreInfo());
			}
			
			if (this.data.beauticianId) {
				promises.push(this.loadBeauticianInfo());
			}
			
			await Promise.all(promises);
		} catch (error) {
			console.error('加载信息失败:', error);
			wx.showToast({
				title: '加载失败，请重试',
				icon: 'none'
			});
		} finally {
			this.setData({ isLoading: false });
		}
	},

	/**
	 * 加载门店信息
	 */
	async loadStoreInfo() {
		try {
			const result = await apiService.getStoreDetail(this.data.storeId);
			if (result.success && result.data) {
				this.setData({
					storeInfo: result.data.storeInfo
				});
			} else {
				console.error('获取门店信息失败:', result.message);
			}
		} catch (error) {
			console.error('加载门店信息失败:', error);
		}
	},

	/**
	 * 加载美容师信息
	 */
	async loadBeauticianInfo() {
		try {
			const result = await apiService.getEmployeeDetail(this.data.beauticianId);
			if (result.success && result.data) {
				this.setData({
					beauticianInfo: result.data
				});
			} else {
				console.error('获取美容师信息失败:', result.message);
			}
		} catch (error) {
			console.error('加载美容师信息失败:', error);
		}
	},

	/**
	 * 加载用户信息
	 */
	loadUserInfo() {
		// 从缓存或用户信息中获取联系人信息
		const userInfo = wx.getStorageSync('userInfo') || {};
		this.setData({
			contactName: userInfo.name || '',
			contactPhone: userInfo.phone || ''
		});
	},

	/**
	 * 返回上一页
	 */
	onBack() {
		wx.navigateBack();
	},

	/**
	 * 选择到店时间
	 */
	selectTime() {
		wx.navigateTo({
			url: `/pages/booking/select-time/index?from=pet-care-detail&storeId=${this.data.storeId}`,
			success: () => {
				console.log('跳转到时间选择页面成功');
			},
			fail: (error) => {
				console.error('跳转到时间选择页面失败:', error);
				wx.showToast({
					title: '跳转失败，请重试',
					icon: 'none'
				});
			}
		});
	},

	/**
	 * 选择服务项目
	 */
	selectServices() {
		wx.navigateTo({
			url: `/pages/booking/select-service/index?from=pet-care-detail&storeId=${this.data.storeId}`,
			success: () => {
				console.log('跳转到服务选择页面成功');
			},
			fail: (error) => {
				console.error('跳转到服务选择页面失败:', error);
				wx.showToast({
					title: '跳转失败，请重试',
					icon: 'none'
				});
			}
		});
	},

	/**
	 * 选择宠物
	 */
	selectPet() {
		wx.navigateTo({
			url: '/pages/pet/select-list/index?from=pet-care-detail',
			success: () => {
				console.log('跳转到宠物选择页面成功');
			},
			fail: (error) => {
				console.error('跳转到宠物选择页面失败:', error);
				wx.showToast({
					title: '跳转失败，请重试',
					icon: 'none'
				});
			}
		});
	},

	/**
	 * 联系人姓名输入
	 */
	onContactNameInput(e) {
		this.setData({
			contactName: e.detail.value
		});
	},

	/**
	 * 联系电话输入
	 */
	onContactPhoneInput(e) {
		this.setData({
			contactPhone: e.detail.value
		});
	},

	/**
	 * 备注信息输入
	 */
	onRemarksInput(e) {
		this.setData({
			remarks: e.detail.value
		});
	},

	/**
	 * 切换协议勾选状态
	 */
	toggleAgreement() {
		this.setData({
			agreementChecked: !this.data.agreementChecked
		});
	},

	/**
	 * 查看协议详情
	 */
	viewAgreement() {
		wx.navigateTo({
			url: '/pages/home-sub/agreement/index?type=grooming',
			success: () => {
				console.log('跳转到美容协议页面成功');
			},
			fail: (error) => {
				console.error('跳转到美容协议页面失败:', error);
				wx.showToast({
					title: '跳转失败，请重试',
					icon: 'none'
				});
			}
		});
	},

	/**
	 * 检查表单是否完整
	 */
	checkFormComplete() {
		const { arrivalTime, selectedServices, selectedPet, contactName, contactPhone } = this.data;
		
		return !!(
			arrivalTime &&
			selectedServices &&
			(selectedPet.id || selectedPet.nickname) &&
			contactName.trim() &&
			contactPhone.trim()
		);
	},

	/**
	 * 确认预约
	 */
	confirmBooking() {
		if (!this.data.agreementChecked) {
			wx.showToast({
				title: '请先阅读并同意协议',
				icon: 'none',
				duration: 2000
			});
			return;
		}

		if (!this.checkFormComplete()) {
			wx.showToast({
				title: '请完善预约信息',
				icon: 'none',
				duration: 2000
			});
			return;
		}

		// 构造预约数据
		const bookingData = {
			type: 'grooming', // 美容预约
			storeInfo: this.data.storeInfo,
			arrivalTime: this.data.arrivalTime,
			services: this.data.selectedServices,
			pet: this.data.selectedPet,
			contactName: this.data.contactName,
			contactPhone: this.data.contactPhone,
			remarks: this.data.remarks,
			createTime: new Date().toISOString()
		};

		// 显示加载提示
		wx.showLoading({
			title: '提交中...'
		});

		// 这里应该调用后端API提交预约
		// 暂时模拟提交成功
		setTimeout(() => {
			wx.hideLoading();
			
			// 跳转到预约成功页面或支付页面
			wx.redirectTo({
				url: '/pages/booking/booking-success/index?type=grooming'
			});
		}, 1500);
	},

	/**
	 * 处理从其他页面返回的数据
	 */
	onPetSelected(selectedPet) {
		this.setData({
			selectedPet: selectedPet
		});
	},

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady() {

	},

	/**
	 * 生命周期函数--监听页面显示
	 */
	onShow() {
		// 检查是否有从其他页面返回的数据
		const app = getApp();
		
		// 处理宠物选择返回数据
		if (app.globalData.selectedPet) {
			console.log('接收到选中的宠物:', app.globalData.selectedPet);
			this.setData({
				selectedPet: app.globalData.selectedPet
			});
			// 清除全局数据
			app.globalData.selectedPet = null;
		}

		// 处理时间选择返回数据
		if (app.globalData.selectedTime) {
			console.log('接收到选中的时间:', app.globalData.selectedTime);
			this.setData({
				arrivalTime: app.globalData.selectedTime
			});
			app.globalData.selectedTime = null;
		}

		// 处理服务选择返回数据
		if (app.globalData.selectedServices) {
			console.log('接收到选中的服务:', app.globalData.selectedServices);
			// 如果是字符串，直接使用；如果是对象，需要处理
			let servicesText = '';
			if (typeof app.globalData.selectedServices === 'string') {
				servicesText = app.globalData.selectedServices;
			} else if (app.globalData.selectedServices.selectedServiceDetails) {
				// 从服务详情中提取服务名称
				const serviceNames = app.globalData.selectedServices.selectedServiceDetails.map(service => service.name);
				servicesText = serviceNames.join('、');
			}
			
			this.setData({
				selectedServices: servicesText
			});
			app.globalData.selectedServices = null;
		}
	},

	/**
	 * 生命周期函数--监听页面隐藏
	 */
	onHide() {

	},

	/**
	 * 生命周期函数--监听页面卸载
	 */
	onUnload() {

	},

	/**
	 * 页面相关事件处理函数--监听用户下拉动作
	 */
	onPullDownRefresh() {

	},

	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom() {

	},

	/**
	 * 页面滚动监听
	 */
	onPageScroll(e) {
		const scrollY = e.scrollTop;
		
		// 计算导航栏背景透明度，滚动距离0-100px内从透明变为不透明
		const maxScrollDistance = 100; // 滚动距离阈值（像素）
		const opacity = Math.min(scrollY / maxScrollDistance, 1);
		
		// 计算文字颜色，透明度达到0.5时开始变黑
		const textColor = opacity >= 0.5 ? '#120E0C' : '#FFFFFF';
		
		// 只有在透明度或文字颜色发生变化时才更新
		if (this.data.navbarOpacity !== opacity || this.data.navbarTextColor !== textColor) {
			this.setData({
				scrollY: scrollY,
				navbarOpacity: opacity,
				navbarTextColor: textColor
			});
		}
	},

	/**
	 * 用户点击右上角分享
	 */
	onShareAppMessage() {

	}
})
